#pragma once

#include "baseTypes.h"
#include <math3d.h>

class Camera
{
public:
	Camera(void);
	~Camera(void);

	//GLFrame GetFrame() { return m_cameraFrame; }
	void MoveForward(float_t argDeltaTime);
	void MoveBackward(float_t argDeltaTime);
	void MoveRight(float_t argDeltaTime);
	void MoveLeft(float_t argDeltaTime);
	void MoveUp(float_t argDeltaTime);
	void MoveDown(float_t argDeltaTime);
	void RotateCameraYawCC(float_t argDeltaTime);
	void RotateCameraYawCW(float_t argDeltaTime);
	void RotateCameraX(float_t argDeltaX);
	void RotateCameraY(float_t argDeltaY);
	const M3DVector3f* const GetTransform() const;
	void SetLookAt() const;

private:
	M3DVector3f m_vForward;
	M3DVector3f m_vUp;
	M3DVector3f m_vSide;

	M3DVector3f m_vPosition;

	float_t m_fForwardStep;
	float_t m_fBackwardStep;
	float_t m_fRightStep;
	float_t m_fLeftStep;
	float_t m_fCurrentPitch;
	const float_t MAX_PITCH;
	const float_t CAMERA_BUFFER;
};

